/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._231;

/**
 *
 * 给定一个整数，编写一个函数来判断它是否是 2 的幂次方。
 *
 * 示例 1:
 *
 * 输入: 1
 * 输出: true
 * 解释: 2^0 = 1
 * 示例 2:
 *
 * 输入: 16
 * 输出: true
 * 解释: 2^4 = 16
 * 示例 3:
 *
 * 输入: 218
 * 输出: false
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._231
 * @ClassName: PowerOfTwo
 * @Author: linyaonan
 * @Date: 2019/12/16 15:56
 */
public class PowerOfTwo {

    public boolean isPowerOfTwo(int n) {
        for (int i = 0; i <= 30; i++) {
            int v = (int) Math.pow(2, i);
            if (v > n) {
                return false;
            }else if (v == n) {
                return true;
            }
        }
        return false;
    }

    public boolean isPowerOfTwo0(int n) {
        if (n < 0) {
            return false;
        }
        String s = Integer.toString(n, 2);
        char[] chars = s.toCharArray();
        int oneCount = 0;
        for (char c : chars) {
            if (oneCount > 1) {
                return false;
            } else {
                if (c == '1') {
                    oneCount++;
                }
            }
        }
        return oneCount == 1;
    }

    public boolean isPowerOfTwo1(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }

    public static void main(String[] args) {
//        double sqrt = Math.log(Integer.MAX_VALUE)/Math.log(2);
//        System.out.println(sqrt);
//        double pow = Math.pow(2, 30);
//        System.out.println(pow);

        Integer pow1 = (int) Math.pow(2, 34);
        System.out.println(pow1);
    }

}
